﻿#define _CRT_SECURE_NO_WARNINGS 1

//数组本身就是地址，
//访问数组打印 
#include <stdio.h>
//int main()
//{
//	int arr[] = { 1,2,3,4,5,6,7,8,9,10 };
//	int i = 0;
//	for (i = 0; i < 10; i++)
//	{
//		printf("%d ", arr[i]);//打印数组
//	}
//	return 0;
//}
//int main()
//{
//	int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
//	int i = 0;
//	for (i = 0; i < 10; i++)
//	{
//		scanf("%d", &arr[i ]);//注意：要在a[i]前面加取地址符号，因为在情况一中我们已经说过，scanf输入的是地址，a[i]代表的是i号下标的值，而不是地址，所以我们要为数组的每一个下标分别赋值，
//			//也就是& a[i] ，& a[0]就是0号下标的地址，& a[1]就是1号下标的地址，数组名才是指针地址，arr才是,arr[]不是；
//	}
//	for (i = 0; i < 10; i++)
//	{
//		printf("%d ", arr[i]);
//	}
//	return 0;
//}
//int main(void)
//{
//	char str[10];  //str是string的缩写, 即字符串
//	printf("请输入字符串：");
//	scanf("%s", str);  /*输入参数是已经定义好的“字符数组名”, 不用加&, 因为在C语言中数组名就代表该数组的起始地址*/
//	printf("输出结果：%s\n", str);
//	return 0;
//}
//关于地址的博客链接https:blog.csdn.net/qq_43290288/article/details/108760945，复制即可
//数组在内存中是连续存放的
//int main()
//{
//	int arr[] = { 1,2,3,4 };
//	int sz = sizeof(arr) / sizeof(arr[0]);
//	printf("%d", sz);
//	return 0;
//}
//二维数组，，，初始化时省略⾏，但是不能省略列，先行后列arr[行][列]
//int main()
//{
//	int arr[3][5] = { 1,2,3,4,5, 2,3,4,5,6, 3,4,5,6,7 };
//	/*printf("%d\n", arr[2][4]);*///只能用循环打印全部
//	int i = 0;
//	int j = 0;
//	for (i = 0; i < 3; i++)
//	{
//		for (j = 0; j < 5; j++)
//		{
//			printf("%d", arr[i][j]);
//		}
//		printf("\n");
//	}
//		return 0;
//}
//（如：arr[0][4]和arr[1][0]）之间也是差4个字节，所以⼆维数组中的每个元素都是连续存放的。
//int main()
//{
//	int n = 0;
//	scanf("%d", &n);//根据输⼊数值确定数组的⼤⼩
//	int arr[n];//编译器中的clang可以支持变长数组，
//	//确定个数
//	int i = 0;
//	for (i = 0; i < n; i++)
//	{
//		scanf("%d", &arr[i]);//输入数组元素
//	}
//	for (i = 0; i < n; i++)
//	{
//		printf("%d ", arr[i]);//打印数组元素
//	}
//	return 0;
//}
//
//int main()
//{
//	int n = 0;
//	
//	scanf("%d", &n);
//	int arr[n];//编译是从下往上的；所以应按步骤来
//	for (int j = 0; j < n; j++)
//	{
//		scanf("%d", &arr[j]);
//	}
//	for (int j = 0; j < n; j++)
//	{
//		printf("%d ", arr[j]);
//	}
//	return 0;
//}

//多个字符从两端移动，向中间汇聚
#include <string.h>
#include <windows.h>
//int main()
//{
//	char arr1[] = "wecome to bit...";
//	char arr2[] = "****************";
//	int left = 0;
//	int right = strlen(arr1) - 1;
//	printf("%s\n", arr2);
//	while (left <= right)
//	{
//		arr2[left] = arr1[left];
//		arr2[right] = arr1[right];
//		left++;
//		right--;
//		Sleep(1000);//放慢速度
//		system("cls");//删去上一个
//		printf("%s\n", arr2);
//		
//	}
//	return 0;
//}

//二分查找
//int main()
//{
//	int arr[] = { 1,2,3,4,5,6,7,8,9,10 };
//	int left = 0;
//	int right = sizeof(arr) / sizeof(arr[0])-1;//strlen(arr) - 1 只能字符有用
//	int key = 7;
//	int mid = 0;//中间值
//	int find = 0;//是否找到
//	while (left <= right)
//	{
//		mid = (left + right) / 2;//一直重新赋值mid的值，一直是从中间的数找
//		if (arr[mid] > key)
//		{
//			right = mid - 1;
//		}
//		else if (arr[mid] < key)
//		{
//			left = mid+1;
//		}
//		 
//		else
//		{
//			find = 1;
//			break;
//		}
//		
//	}
//	if (1 == find)
//	{
//		printf("找到了，下标是%d\n", mid);
//	}
//	else
//	{
//		printf("找不到\n");
//	}
//	return 0;
//}
//int main()
//{
//	int arr[] = { 1,2,3,4,5,6,7,8,9,10 };
//	int left = 0;
//	int right = sizeof(arr) / sizeof(arr[0]) - 1;
//	int key = 7;//要找的数字
//	int mid = 0;//记录中间元素的下标
//	int find = 0;
//	while (left <= right)
//	{
//		mid = (left + right) / 2;
//		if (arr[mid] > key)
//		{
//			right = mid - 1;
//		}
//		else if (arr[mid] < key)
//		{
//			left = mid + 1;
//		}
//		else
//		{
//			find = 1;
//			break;
//		}
//	}
//	if (1 == find)
//		printf("找到了,下标是%d\n", mid);
//	else
//		printf("找不到\n");
//	return 0;
//}

//strlen求的是字符串长度，从首元素开始计算，遇见‘\0’停止
//sizeof这里求的是数组大小，数组大小等于有效元素个数*每个元素的大小。
//str字符数组使用"hello bit"初始化，最终也会将'\0'放置到数组中，因此数组中总共有10个元素
//
//sizeof(str)：获取数组的总大小，10个元素，每个元素占1个字节，因此总共是10个字节
//strlen(str) : 获取字符串中有效字符的个数，不算'\0'，因此总共9个有效字符
//故上述printf会分别打印：10  9


//编写二分查找法

//int main()//在有序的数组中寻找
//{
//	int n = 0;
//	int arr[] = { 1,6,4,44,5,34,7,11,9,10 };//有序的才行；
//	int key = 6;//查找数字6
//	int mid = 0;//中间值
//	int find = 0;//没找到
//	int left = 0;
//	int right = sizeof(arr) / sizeof(arr[0]) - 1;
//
//	while (left <= right)
//	{
//		//赋值
//		mid = (left + right) / 2;//二分查找
//			if (arr[mid] > key)
//			{
//				right = mid-1;
//		}
//			else if(arr[mid]<key)
//			{
//				left = mid + 1;
//			}
//			else
//			{
//				find = 1;
//				break;
//			}
//	}
//	if (find == 1)
//	{
//		printf("找到了，下标是%d\n" ,mid);
//	}
//	else
//	{
//		printf("找不到\n");
//	}
//	return 0;
//}